home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2002 November / SGI IRIX Base Documentation 2002 November.iso / usr / share / catman / p_man / cat3 / SCSL / srotmg.z / srotmg
Encoding:
Text File  |  2002-10-03  |  23.9 KB  |  595 lines

  1.  
  2.  
  3.  
  4. SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))                                                          SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      SSSSRRRROOOOTTTTMMMMGGGG, DDDDRRRROOOOTTTTMMMMGGGG - Constructs a modified Givens plane rotation
  10.  
  11. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  12.      Single precision
  13.  
  14.           Fortran:
  15.                CCCCAAAALLLLLLLL SSSSRRRROOOOTTTTMMMMGGGG ((((_d_1,,,, _d_2,,,, _b_1,,,, _b_2,,,, _r_p_a_r_a_m))))
  16.  
  17.           C/C++:
  18.                ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>>
  19.                vvvvooooiiiidddd ssssrrrroooottttmmmmgggg ((((ffffllllooooaaaatttt *_d_1,,,, ffffllllooooaaaatttt *_d_2,,,, ffffllllooooaaaatttt *_b_1,,,, ffffllllooooaaaatttt _b_2,,,, ffffllllooooaaaatttt
  20.                *_r_p_a_r_a_m))));;;;
  21.  
  22.      Double precision
  23.  
  24.           Fortran:
  25.  
  26.                CCCCAAAALLLLLLLL DDDDRRRROOOOTTTTMMMMGGGG ((((_d_1,,,, _d_2,,,, _b_1,,,, _b_2,,,, _r_p_a_r_a_m))))
  27.  
  28.           C/C++:
  29.                ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>>
  30.                vvvvooooiiiidddd ddddrrrroooottttmmmmgggg ((((ddddoooouuuubbbblllleeee *_d_1,,,, ddddoooouuuubbbblllleeee *_d_2,,,, ddddoooouuuubbbblllleeee *_b_1,,,, ddddoooouuuubbbblllleeee _b_2,,,,
  31.                ddddoooouuuubbbblllleeee *_r_p_a_r_a_m))));;;;
  32.  
  33. IIIIMMMMPPPPLLLLEEEEMMMMEEEENNNNTTTTAAAATTTTIIIIOOOONNNN
  34.      These routines are part of the SCSL Scientific Library and can be loaded
  35.      using either the ----llllssssccccssss or the ----llllssssccccssss____mmmmpppp option.  The ----llllssssccccssss____mmmmpppp option
  36.      directs the linker to use the multi-processor version of the library.
  37.  
  38.      When linking to SCSL with ----llllssssccccssss or ----llllssssccccssss____mmmmpppp, the default integer size is
  39.      4 bytes (32 bits). Another version of SCSL is available in which integers
  40.      are 8 bytes (64 bits).  This version allows the user access to larger
  41.      memory sizes and helps when porting legacy Cray codes.  It can be loaded
  42.      by using the ----llllssssccccssss____iiii8888 option or the ----llllssssccccssss____iiii8888____mmmmpppp option. A program may use
  43.      only one of the two versions; 4-byte integer and 8-byte integer library
  44.      calls cannot be mixed.
  45.  
  46.      The C and C++ prototypes shown above are appropriate for the 4-byte
  47.      integer version of SCSL. When using the 8-byte integer version, the
  48.      variables of type iiiinnnntttt become lllloooonnnngggg lllloooonnnngggg and the <<<<ssssccccssssllll____bbbbllllaaaassss____iiii8888....hhhh>>>> header
  49.      file should be included.
  50.  
  51. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  52.      These routines compute the elements of a modified Givens plane rotation
  53.      matrix.
  54.  
  55.      See the NOTES section of this man page for information about the
  56.      interpretation of the data types described in the following arguments.
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))                                                          SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))
  71.  
  72.  
  73.  
  74.      These routines have the following arguments:
  75.  
  76.      _d_1        First diagonal element.  (input and output)
  77.                SSSSRRRROOOOTTTTMMMMGGGG: Single precision.
  78.                DDDDRRRROOOOTTTTMMMMGGGG: Double precision.
  79.  
  80.                On input, this value is the first diagonal element of the
  81.                scaling matrix _D.  On the first call to the routine, this value
  82.                is typically 1.0.  Subsequent calls typically use the value
  83.                from the previous call.  On output, this value is the first
  84.                diagonal element of the updated scaling matrix _D''''.
  85.  
  86.                For C/C++, a pointer to this value is passed.
  87.  
  88.      _d_2        Second diagonal element. (input and output)
  89.                SSSSRRRROOOOTTTTMMMMGGGG: Single precision.
  90.                DDDDRRRROOOOTTTTMMMMGGGG: Double precision.
  91.  
  92.                On input, this is the second diagonal element of the scaling
  93.                matrix _D.  On the second call to the routine, this value is
  94.                typically 1.0.  Subsequent calls typically use the value from
  95.                the previous call.  On output, this value is the second
  96.                diagonal element of the updated scaling matrix _D''''.
  97.  
  98.                For C/C++, a pointer to this value is passed.
  99.  
  100.      _b_1        x-coordinate.  (input and output)
  101.                SSSSRRRROOOOTTTTMMMMGGGG: Single precision.
  102.                DDDDRRRROOOOTTTTMMMMGGGG: Double precision.
  103.  
  104.                On input, this value is the _x-coordinate of the vector used to
  105.                define the angle of rotation, before scaling (multiplying by
  106.                the matrix _D).  On output, this value is the _x-coordinate of
  107.                the rotated vector, before scaling (multiplying by the matrix
  108.                _D'''').
  109.  
  110.                For C/C++, a pointer to this value is passed.
  111.  
  112.      _b_2        y-coordinate. (input)
  113.                SSSSRRRROOOOTTTTMMMMGGGG: Single precision.
  114.                DDDDRRRROOOOTTTTMMMMGGGG: Double precision.
  115.  
  116.                On input, this value is the _y-coordinate of the vector used to
  117.                define the angle of rotation, before scaling (multiplying by
  118.                the matrix _D).  It is unchanged on output.
  119.  
  120.      _r_p_a_r_a_m    Real array of dimension 5.  (output)
  121.                SSSSRRRROOOOTTTTMMMMGGGG: Single precision array.
  122.                DDDDRRRROOOOTTTTMMMMGGGG: Double precision array.
  123.                This array contains rotation matrix information.  The routine
  124.                sets up the computed elements in _r_p_a_r_a_m from inputs _d_1, _d_2, b1,
  125.                and _b_2.
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))                                                          SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))
  137.  
  138.  
  139.  
  140.    SSSSttttaaaannnnddddaaaarrrrdddd GGGGiiiivvvveeeennnnssss RRRRoooottttaaaattttiiiioooonnnn
  141.      A standard Givens rotation (see SSSSRRRROOOOTTTTGGGG(3S)) is based on an orthogonal
  142.      matrix _G that rotates points on a Cartesian _x_y-coordinate plane.  To
  143.      calculate the rotation matrix, you must provide the angle of rotation
  144.      desired, or, equivalently, a vector (point) that lies along the angle of
  145.      rotation.  For a given planar point (_x_r, _y_r), _G is formed so that:
  146.  
  147.           _    _   _     _  _    _     _    _
  148.           | x' |   | c s |  | x  |   G | x  |
  149.           |    |   |     |  |  r |     |  r |
  150.           | 0  | = |-s c |  | y  | =   | y  |
  151.           |    |   |     |  |  r |     |  r |
  152.           -    -   -     -  -    -     -    -
  153.  
  154.  
  155.      where _x' = sqrt (_x_r + _y_r) .
  156.  
  157.      With this rotation matrix _G, you can then convert any number of existing
  158.      planar points to the new (rotated) _x_y-coordinate system.  For _n points,
  159.      the rotations would be as follows:
  160.  
  161.           _    _   _     _  _    _
  162.           | x  |   | c s |  | x  |
  163.           |  i |   |     |  |  i |
  164.           | 0  |<- |-s c |  | y  |
  165.           |  i |   |     |  |  i |
  166.           -    -   -     -  -    -
  167.  
  168.  
  169.      for _i = 1, 2, ..., _n
  170.  
  171.  
  172.    MMMMooooddddiiiiffffiiiieeeedddd GGGGiiiivvvveeeennnnssss RRRRoooottttaaaattttiiiioooonnnn
  173.      The algorithm for these routines is based on the following observation.
  174.      The rotation matrix _G can be factored into a _s_c_a_l_i_n_g matrix (diagonal
  175.      matrix) and _m_o_d_i_f_i_e_d rotation matrix _H, for which either the diagonal or
  176.      the off-diagonal elements are units (that is, +1 or -1).  Thus, to
  177.      perform _m modified (scaled) rotations on _n planar points, requires only
  178.      2_n_m, rather than 4_n_m multiplications for the standard rotation.
  179.  
  180.      Because you may want to perform several successive rotations, this
  181.      routine assumes that you have leftover scaling factors from your previous
  182.      modified Givens rotation; that is, the routine requires you to input not
  183.      only a planar rotation vector (_b_1, _b_2) but also the squares of the
  184.      diagonal elements of the scaling matrix, _d_1 and _d_2.  The actual rotation
  185.      vector is specified as follows:
  186.  
  187.           _    _   _                   _  _    _    1/2_    _
  188.           | xr |   | sqrt(d1)    0     |  | b1 |   D   | b1 |
  189.           | yr | = |    0     sqrt(d2) |  | b2 | =     | b2 |
  190.           -    -   -                   -  -    -       -    -
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))                                                          SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))
  203.  
  204.  
  205.  
  206.      where _d_1 and _d_2 are the input scaling factors.
  207.  
  208.      Given these inputs, the routine generates a new modified rotation matrix
  209.      _H with units for either the diagonal or off-diagonal elements, and new
  210.      elements _d_1' and _d_2' for the new scaling factors, and rotated but
  211.      unscaled vector (_b_1', 0), with the following results:
  212.  
  213.        _    _      1/2_    _     1/2   _    _     1/2_         _ _    _
  214.      G | xr |   G D   | b1 |   D'    H | b1 | = D'   | h11 h12 | | b1 |
  215.        | yr | =       | b2 | =         | b2 |        | h21 h22 | | b2 |
  216.        -    -         -    -           -    -        -         - -    -
  217.                                                   1/2_     _   _    _
  218.                                                 D'   | b1' |   | x' |
  219.                                               =      |  0  | = | 0  |
  220.                                                      -     -   -    -
  221.  
  222.  
  223.      where:
  224.  
  225.             1/2
  226.           D'   ( = diag {sqrt(d1'), sqrt(d2')} )
  227.  
  228.  
  229.      uses the updated scaling factors:
  230.  
  231.      *   _d_1''''
  232.  
  233.      *   _d_2'''',
  234.  
  235.          which are _d_1 and _d_2 on output.  _H is stored in the output array
  236.          argument _r_p_a_r_a_m; _b_1' is stored as _b_1 on output.
  237.  
  238.  
  239.      _D''''1111////2222 HHHH equals _G _D _1/_2, nnnnooootttt _G, as implied earlier.  You must account for
  240.      the old scaling factors when calculating the new scaling factors.
  241.  
  242.      After calculating the matrix _H by using SSSSRRRROOOOTTTTMMMMGGGG/DDDDRRRROOOOTTTTMMMMGGGG, you can then use
  243.      it in SSSSRRRROOOOTTTTMMMM/DDDDRRRROOOOTTTTMMMM to convert points to the new coordinate system.
  244.  
  245.    MMMMeeeeaaaannnniiiinnnngggg ooooffff tttthhhheeee OOOOuuuuttttppppuuuutttt VVVVaaaalllluuuueeeessss
  246.      The output values are returned through arguments _d_1, _d_2, _b_1, and _r_p_a_r_a_m.
  247.  
  248.      The scaling factors _d_1 and _d_2 are updated with each call to the routine.
  249.      Although SSSSRRRROOOOTTTTMMMM/DDDDRRRROOOOTTTTMMMM does not need the updated factors, they are needed
  250.      in two other important contexts:
  251.  
  252.      *   As input for subsequent calls to this routine.
  253.  
  254.      *   As scaling factors for rotated but unscaled points (_x_i, _y_i), which
  255.          are output from SSSSRRRROOOOTTTTMMMM./DDDDRRRROOOOTTTTMMMM.
  256.  
  257.  
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))                                                          SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))
  269.  
  270.  
  271.  
  272.          In this second usage, the actual (scaled) points would be given by
  273.  
  274.               (sqrt(d1)*x(i), sqrt(d2)*y(i))
  275.  
  276.  
  277.      Doing this operation frequently on all your points is counterproductive.
  278.      The main advantage of the modified rotation algorithm is to reduce the
  279.      number of operations.  If you fold in the scaling factors after each
  280.      rotation, you are performing the same number of operations as in the
  281.      standard Givens rotation.
  282.  
  283.      These two uses for the scaling factors are mutually exclusive; that is,
  284.      if you fold the scaling factors back into all your points, you no longer
  285.      need those factors for these routines.  After folding in the scaling
  286.      factors, and before the next call to SSSSRRRROOOOTTTTMMMMGGGG/DDDDRRRROOOOTTTTMMMMGGGG, reset _d_1 and _d_2 to
  287.      1.0.
  288.  
  289.      On output, _b_1 represents the new _x-coordinate after rotating (but before
  290.      scaling) the rotation vector.  Although the _y-coordinate of this vector
  291.      is 0.0 (see the the previous discussion), the corresponding value _b_2 is
  292.      unchanged on output.
  293.  
  294.      The output array argument _r_p_a_r_a_m specifies the format of matrix _H, and it
  295.      holds the nonunit values of _H.  This is the only output of these routines
  296.      that SSSSRRRROOOOTTTTMMMM/DDDDRRRROOOOTTTTMMMM requires.  Each element of _r_p_a_r_a_m has a specific
  297.      meaning, as follows:
  298.  
  299.      _r_p_a_r_a_m(1)  a flag parameter that specifies how the matrix is stored
  300.  
  301.                 = 0.0    Off-diagonal elements of _H are units.
  302.  
  303.                 = 1.0    Diagonal elements of _H are units.
  304.  
  305.                 = -1.0   Rescaling case (see the following subsection).
  306.  
  307.                 = -2.0   _H is the identity matrix; no rotation needed.
  308.  
  309.      _r_p_a_r_a_m(2)  = _h_1,_1 if needed
  310.  
  311.      _r_p_a_r_a_m(3)  = _h_2,_1 if needed
  312.  
  313.      _r_p_a_r_a_m(4)  = _h_1,_2 if needed
  314.  
  315.      _r_p_a_r_a_m(5)  = _h_2,_2 if needed
  316.  
  317.    CCCCaaaallllccccuuuullllaaaattttiiiinnnngggg tttthhhheeee OOOOuuuuttttppppuuuutttt VVVVaaaalllluuuueeeessss
  318.      The following presents the algorithm for calculating the output values
  319.      _d_1, _d_2, _b_1, and _r_p_a_r_a_m, based on the input values _d_1, _d_2, _b_1, and _b_2.
  320.      This algorithm is presented without explanation or proof.  For a more
  321.      complete discussion of the modified Givens algorithm, see the papers
  322.      listed in the SEE ALSO section.
  323.  
  324.  
  325.  
  326.  
  327.                                                                         PPPPaaaaggggeeee 5555
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))                                                          SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))
  335.  
  336.  
  337.  
  338.      CCCCaaaasssseeee 1111::::  bbbb2222 ==== 0000  ((((ttttrrrriiiivvvviiiiaaaallll ccccaaaasssseeee))))
  339.  
  340.      In this case, no rotation is needed.  The flag value, _r_p_a_r_a_m(1), is set
  341.      to -2.0.  When passed to routine SSSSRRRROOOOTTTTMMMM/DDDDRRRROOOOTTTTMMMM, this flag indicates that it
  342.      should not do any rotations.
  343.  
  344.      On output from SSSSRRRROOOOTTTTMMMMGGGG/DDDDRRRROOOOTTTTMMMMGGGG, _d_1, _d_2, and _b_1 are unchanged.
  345.  
  346.      CCCCaaaasssseeee 2222:::: |||| ssssqqqqrrrrtttt((((dddd1111)))) **** bbbb1111 |||| >>>> |||| ssssqqqqrrrrtttt((((dddd2222))))****bbbb2222 ||||  ((((||||xxxxrrrr|||| >>>> ||||yyyyrrrr||||))))
  347.  
  348.      In this case, the diagonal elements of _H (h1,1 and h2,2) are set to 1.0.
  349.      Thus, the _r_p_a_r_a_m values set on output are as follows:
  350.  
  351.           rparam(1) <-- 0.0
  352.           rparam(3) <-- h2,1 = -b2/b1
  353.           rparam(4) <-- h1,2 = (d2*b2)/(d1*b1)
  354.  
  355.  
  356.      The output values of the scaling factors are as follows:
  357.  
  358.           d1 <-- d1' = d1/u
  359.           d2 <-- d2' = d2/u
  360.  
  361.  
  362.      where
  363.  
  364.           u = det(H) = 1 + (d2*b2*b2)/(d1*b1*b1)
  365.  
  366.  
  367.      The output value of _b_1 is as follows:
  368.  
  369.           b1 <-- b1' = b1*u
  370.  
  371.  
  372.      If rescaling is needed, SSSSRRRROOOOTTTTMMMMGGGG/DDDDRRRROOOOTTTTMMMMGGGG will further modify these output
  373.      values before the end of the routine.  See case 4 later in this
  374.      subsection.
  375.  
  376.      CCCCaaaasssseeee 3333:::: |||| ssssqqqqrrrrtttt((((dddd1111))))****bbbb1111 |||| <<<<==== |||| ssssqqqqrrrrtttt((((dddd2222)))) ****  bbbb2222 |||| ((((||||xxxxrrrr|||| <<<<==== ||||yyyyrrrr||||))))
  377.  
  378.      In this case, the off-diagonal elements of _H are units (to be specific,
  379.      _h_2,_1 = -1 and _h_1,_2 = 1).  Thus, the _r_p_a_r_a_m values set on output are as
  380.      follows:
  381.  
  382.           rparam(1) <-- 1.0
  383.           rparam(2) <-- h1,1 = (d1*b1)/(d2*b2)
  384.           rparam(5) <-- h2,2 = b1/b2
  385.  
  386.  
  387.      The output values of the scaling factors are as follows:
  388.  
  389.  
  390.  
  391.  
  392.  
  393.                                                                         PPPPaaaaggggeeee 6666
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400. SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))                                                          SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))
  401.  
  402.  
  403.  
  404.           d1 <-- d1' = d2/u
  405.           d2 <-- d2' = d1/u
  406.  
  407.  
  408.      where
  409.  
  410.           u = det(H) = 1 + (d1 * b1*b1)/(d2 * b2* b2)
  411.  
  412.  
  413.      The output value of _b_1 is as follows:
  414.  
  415.           b1 <-- b1' = b2*u
  416.  
  417.  
  418.      If rescaling is needed, SSSSRRRROOOOTTTTMMMMGGGG/DDDDRRRROOOOTTTTMMMMGGGG will further modify these output
  419.      values before the end of the routine.  See case 4.
  420.  
  421.      CCCCaaaasssseeee 4444::::  Rescaling
  422.  
  423.      If the scaling factors become either very large or very small, the
  424.      scaling and rotation operations may lose a lot of accuracy; therefore,
  425.      each scaling factor from case 2 or case 3 is kept within the range:
  426.  
  427.           gamma**(-2) <= | d(i)' | <= gamma**2 ,  for i = 1, 2
  428.  
  429.  
  430.      where
  431.  
  432.           d(1)' = d1', d(2)' = d2', and gamma = 2.0**12 = 4096.0.
  433.  
  434.  
  435.      At the end of case 2 or case 3 assignments, if either of the scaling
  436.      factors falls outside this range, this routine must rescale that factor
  437.      (and the corresponding elements of _H) to bring its size back within the
  438.      specified range
  439.  
  440.      (48 - log2(_g_a_m_m_a) = _4_8 - _1_2 = _3_6 _b_i_t_s (~ _1_0 _d_e_c_i_m_a_l _d_i_g_i_t_s))
  441.  
  442.  
  443.      Rescaling is performed as follows:
  444.  
  445.      If either _d_1 or _d_2 is 0, no rescaling is done; otherwise, let
  446.  
  447.           q(i) = int(log_base_gamma(sqrt(|d(i)'|)))
  448.                = int(log2(|d(i)'|)/24) ,   for i = 1 , 2.
  449.  
  450.  
  451.      Then the following is true:
  452.  
  453.           q(i) < 0 ,   if | d(i)'| < gamma**2
  454.           q(i) = 0 ,   if gamma**(-2) <= |d(i)'| <= gamma**2
  455.           q(i) > 0 ,   if | d(i)'| > gamma**2
  456.  
  457.  
  458.  
  459.                                                                         PPPPaaaaggggeeee 7777
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466. SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))                                                          SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))
  467.  
  468.  
  469.  
  470.      Furthermore, |q(i)| represents the number of times d(i)' must be
  471.      multiplied (or divided) by _g_a_m_m_a**2 to return it to the proper range of
  472.      values.
  473.  
  474.      In this case, the _r_p_a_r_a_m values set on output are as follows:
  475.  
  476.           rparam(1) <-- -1.0
  477.           rparam(2) <-- h1,1' = h1,1*gamma**q(1)
  478.           rparam(3) <-- h2,1' = h2,1*gamma**q(2)
  479.           rparam(4) <-- h1,2' = h1,2*gamma**q(1)
  480.           rparam(5) <-- h2,2' = h2,2*gamma**q(2)
  481.  
  482.  
  483.      The output values of the scaling factors are as follows:
  484.  
  485.           d1 <-- d1'' = d1'*gamma**(-2*q(1))
  486.           d2 <-- d2'' = d2'*gamma**(-2*q(2))
  487.  
  488.  
  489.      The output value of _b_1 is as follows:
  490.  
  491.           b1 <-- b1'' = b1'*gamma**q(1)
  492.  
  493.  
  494. NNNNOOOOTTTTEEEESSSS
  495.      The following data types are described in this documentation:
  496.  
  497.           TTTTeeeerrrrmmmm UUUUsssseeeedddd                     DDDDaaaattttaaaa ttttyyyyppppeeee
  498.  
  499.      Fortran:
  500.  
  501.           Array dimensioned _n           xxxx((((nnnn))))
  502.  
  503.           Integer                       IIIINNNNTTTTEEEEGGGGEEEERRRR (IIIINNNNTTTTEEEEGGGGEEEERRRR****8888 for ----llllssssccccssss____iiii8888[[[[____mmmmpppp]]]])
  504.  
  505.           Single precision              RRRREEEEAAAALLLL
  506.  
  507.           Double precision              DDDDOOOOUUUUBBBBLLLLEEEE PPPPRRRREEEECCCCIIIISSSSIIIIOOOONNNN
  508.  
  509.      C/C++:
  510.  
  511.           Array dimensioned _n           xxxx[[[[_n]]]]
  512.  
  513.           Integer                       iiiinnnntttt (lllloooonnnngggg lllloooonnnngggg for ----llllssssccccssss____iiii8888[[[[____mmmmpppp]]]])
  514.  
  515.           Single precision              ffffllllooooaaaatttt
  516.  
  517.           Double precision              ddddoooouuuubbbblllleeee
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.                                                                         PPPPaaaaggggeeee 8888
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532. SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))                                                          SSSSRRRROOOOTTTTMMMMGGGG((((3333SSSS))))
  533.  
  534.  
  535.  
  536. SEE ALSO
  537.      IIIINNNNTTTTRRRROOOO____SSSSCCCCSSSSLLLL(3S), IIIINNNNTTTTRRRROOOO____BBBBLLLLAAAASSSS1111(3S)
  538.  
  539.      IIIINNNNTTTTRRRROOOO____CCCCBBBBLLLLAAAASSSS(3S) for information about using the C interface to Fortran 77
  540.      Basic Linear Algebra Subprograms (legacy BLAS) set forth by the Basic
  541.      Linear Algebra Subprograms Technical Forum.
  542.  
  543.      SSSSRRRROOOOTTTT(3S), SSSSRRRROOOOTTTTGGGG(3S), SSSSRRRROOOOTTTTMMMM(3S)
  544.  
  545.      Gentleman, W. M., "Least Squares Computations by Givens Transformations
  546.      Without Square Roots," _J_o_u_r_n_a_l _o_f _t_h_e _I_n_s_t_i_t_u_t_e _f_o_r _M_a_t_h_e_m_a_t_i_c_a_l
  547.      _A_p_p_l_i_c_a_t_i_o_n_s 12 (1973), pp. 329 - 336.
  548.  
  549.      Lawson, C., Hanson, R., Kincaid, D., and Krogh, F., "Basic Linear Algebra
  550.      Subprograms for Fortran Usage," _A_C_M _T_r_a_n_s_a_c_t_i_o_n_s _o_n _M_a_t_h_e_m_a_t_i_c_a_l
  551.      _S_o_f_t_w_a_r_e, 5 (1979), pp. 308 - 325.
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.                                                                         PPPPaaaaggggeeee 9999
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.